package cn.good.yan.service.t2;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;

/**
 * 2. CompletableFuture 定义操作 - 异步任务
 * 异步回掉 -获取返回值
 *
 * @author shengren.yan
 * @create 2024-03-25
 */
public class CompletableFuture4 {

    public static void main(String[] args) {
        CompletableFuture<String> completableFuture = CompletableFuture.supplyAsync(() -> {
            // 暂停几秒钟线程
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "返回值：abc";
        });

        // 获取返回值，有异常需要抛出
        // System.out.println(completableFuture.get());
        // 获取返回值，有异常需要抛出，可以设置超出时间，过期就不在等待，超时会有异常 TimeoutExcection
        // System.out.println(completableFuture.get(2L,TimeUnit.SECONDS));
        // 获取返回值，跟get(）一样，只是不需要抛出异常，
        // System.out.println(completableFuture.join());
        // 获取返回值，立刻获取值，如果没有获取到，就返回一个默认值
        // System.out.println(completableFuture.getNow("默认催：1"));

        // 暂停几秒钟线程
        // try { TimeUnit.SECONDS.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); }
        // 立刻打断，获取值，如果没有获取到，就返回一个默认值，如果是false ，就代表获取到子线程里的值，complete 返回是布尔类型
        // System.out.println(completableFuture.complete("默认催：1") + "\t" + completableFuture.get());
    }
}
